<?php

namespace app\api\controller;

use app\common\controller\Api;
use PhpOffice\PhpSpreadsheet\Writer\Pdf\Mpdf;

/**
 * 示例接口
 */
class Demo extends Api
{

    //如果$noNeedLogin为空表示所有接口都需要登录才能请求
    //如果$noNeedRight为空表示所有接口都需要验证权限才能请求
    //如果接口已经设置无需登录,那也就无需鉴权了
    //
    // 无需登录的接口,*表示全部 1
    protected $noNeedLogin = ['*'];
    // 无需鉴权的接口,*表示全部
    protected $noNeedRight = ['*'];

    protected $outputPath =ROOT_PATH . 'public/vehicle_report.pdf';
    protected $fontPath =ROOT_PATH . 'public/SimSun.ttf';


    /**
     * 测试方法
     *
     * @ApiTitle    (测试名称)
     * @ApiSummary  (测试描述信息)
     * @ApiMethod   (POST)
     * @ApiRoute    (/api/demo/test/id/{id}/name/{name})
     * @ApiHeaders  (name=token, type=string, required=true, description="请求的Token")
     * @ApiParams   (name="id", type="integer", required=true, description="会员ID")
     * @ApiParams   (name="name", type="string", required=true, description="用户名")
     * @ApiParams   (name="data", type="object", sample="{'user_id':'int','user_name':'string','profile':{'email':'string','age':'integer'}}", description="扩展数据")
     * @ApiReturnParams   (name="code", type="integer", required=true, sample="0")
     * @ApiReturnParams   (name="msg", type="string", required=true, sample="返回成功")
     * @ApiReturnParams   (name="data", type="object", sample="{'user_id':'int','user_name':'string','profile':{'email':'string','age':'integer'}}", description="扩展数据返回")
     * @ApiReturn   ({
         'code':'1',
         'msg':'返回成功'
        })
     */
    public function test()
    {
        $this->success('返回成功', $this->request->param());
    }

    /**
     * 无需登录的接口
     *
     */
    public function test1()
    {
        $this->success('返回成功', ['action' => 'test1']);
    }

    /**
     * 需要登录的接口
     *
     */
    public function test2()
    {
        $this->success('返回成功', ['action' => 'test2']);
    }

    /**
     * 需要登录且需要验证有相应组的权限
     *
     */
    public function test3()
    {
        $this->success('返回成功', ['action' => 'test3']);
    }


//require_once ('tcpdf_include.php');  // 引入 TCPDF 库

    function generateVehicleReport($data) {
        // 使用自定义 PDF 类
//        $pdf = new CustomPDF();
        $pdf  = new Pdf($data['vehicle_info']['委托车辆'], $data['vehicle_info']['VIN码']);
        $pdf->SetMargins(15, 27, 15);
        $pdf->SetAutoPageBreak(TRUE, 25);
        $pdf->AddPage();

        // 标题
        $pdf->SetFont('stsongstdlight', 'B', 16);
        $pdf->Cell(0, 10, "车辆检测报告", 0, 1, 'C');
        $pdf->Ln(5);

        // 车辆信息表格
        $pdf->SetFont('stsongstdlight', 'B', 12);
        $pdf->SetFillColor(255, 165, 0); // 背景橙色
        $pdf->SetTextColor(255, 255, 255); // 字体白色
        $pdf->Cell(0, 10, "车辆信息", 1, 1, 'C', 1);

        $pdf->SetFont('stsongstdlight', '', 10);
        $pdf->SetTextColor(0, 0, 0); // 恢复字体颜色：黑色
        $pdf->SetDrawColor(255, 165, 0); // 边框橙色
        foreach ($data['vehicle_info'] as $key => $value) {
            $pdf->Cell(40, 10, $key, 1, 0, 'C');
            $pdf->Cell(0, 10, $value, 1, 1, 'C');
        }
        $pdf->Ln(5);

        // 检测部分表格
        foreach ($data['tables'] as $tableTitle => $tableContent) {
            // 表格标题
            $pdf->SetFont('stsongstdlight', 'B', 12);
            $pdf->SetFillColor(255, 165, 0); // 背景橙色
            $pdf->SetTextColor(255, 255, 255); // 字体白色
            $pdf->Cell(0, 10, $tableTitle, 1, 1, 'C', 1);

            // 绘制表头（字体加粗，移除背景色）
            $pdf->SetFont('stsongstdlight', 'B', 10);
            $pdf->SetTextColor(0, 0, 0); // 黑色字体
            $pdf->SetFillColor(255, 255, 255); // 设置为无背景色
            foreach ($tableContent[0] as $header) {
                $pdf->Cell(60, 10, $header, 1, 0, 'C', 0);
            }
            $pdf->Ln();

            // 表格内容
            $pdf->SetFont('stsongstdlight', '', 10); // 恢复正常字体
            foreach (array_slice($tableContent, 1) as $row) {
                foreach ($row as $cell) {
                    $pdf->Cell(60, 10, $cell, 1, 0, 'C');
                }
                $pdf->Ln();
            }
            $pdf->Ln(5);
        }

        // 添加图片部分（修改为表格样式）
        $pdf->AddPage();
        $pdf->SetFont('stsongstdlight', 'B', 12);
        $pdf->SetFillColor(255, 165, 0); // 背景橙色
        $pdf->SetTextColor(255, 255, 255); // 字体白色
        $pdf->Cell(50, 10, "检测车辆照片", 1, 0, 'C', 1); // 左侧竖着显示标题
        $pdf->Ln(10);

        // 图片内容
        $pdf->SetTextColor(0, 0, 0); // 恢复字体颜色：黑色
        $pdf->SetFont('stsongstdlight', '', 10);
        foreach ($data['images'] as $image) {
            // 设置表格的宽度和高度
            $pdf->Cell(30, 90, $image['label'], 1, 0, 'C');
            if (@getimagesize($image['path'])) {
                // 强制拉伸图片至宽度为120mm，高度为90mm
                $pdf->Image($image['path'], 40, $pdf->GetY(), 160, 90); // 图片宽度120mm, 高度90mm
            } else {
                $pdf->Cell(150, 90, "图片加载失败", 1, 0, 'C');
            }
            $pdf->Ln(90); // 下一行
        }

        // 检测总结表格
        $pdf->AddPage();
        $pdf->SetFont('stsongstdlight', 'B', 12);
        $pdf->SetFillColor(255, 165, 0); // 背景橙色
        $pdf->SetTextColor(255, 255, 255); // 字体白色
        $pdf->Cell(0, 10, "检测总结", 1, 1, 'C', 1);

        $pdf->SetFont('stsongstdlight', '', 10);
        $pdf->SetTextColor(0, 0, 0); // 恢复字体颜色：黑色
        $pdf->SetDrawColor(255, 165, 0); // 边框橙色
        $pdf->MultiCell(0, 10, $data['full_summary'], 1, 'L');
        $pdf->Ln(5);

        // 注意事项
        $pdf->SetFont('stsongstdlight', 'B', 12);
        $pdf->Cell(0, 10, "注意事项", 0, 1);
        $pdf->SetFont('stsongstdlight', '', 10);
        foreach ($data['notes'] as $note) {
            $pdf->MultiCell(0, 10, "- $note", 0, 'L');
        }

        // 保存 PDF
        $outputPath = $this->outputPath;
        $pdf->Output($outputPath, 'F');
        return $outputPath;
    }
    public function test4(){
        $data = [
            'vehicle_info' => [
                '委托车辆' => 'Jeep 牧马人 撒哈拉',
                '委托人' => '菲卡名车',
                '检车日期' => '2023-4-5',
                'VIN码' => '1C4HJXEN9JW129379',
                '车身颜色' => '黑',
                '表显里程' => '70624 km',
                '排量' => '2.0T',
                '总质量' => '2472kg',
                '使用性质' => '非营运',
            ],
            'tables' => [
                '车辆覆盖件检测' => [
                    ['部位', '现象', '备注'],
                    ['前保险杠', '正常', ''],
                    ['引擎盖', '正常', ''],
                    ['左前翼子板', '正常', ''],
                ],
                '轮胎检测' => [
                    ['部位', '现象', '备注'],
                    ['左前轮胎', '正常', ''],
                    ['右前轮胎', '正常', ''],
                    ['左后轮胎', '正常', ''],
                ],
            ],
            'images' => [
                ['path' => 'https://image.3llh.com/uploads/20241122/QQ20241127-101021.png', 'label' => '车辆前方'],
                ['path' => 'https://image.3llh.com/uploads/20241122/QQ20241127-101021.png', 'label' => '车辆后方'],
                ['path' => 'https://image.3llh.com/uploads/20241122/QQ20241127-101021.png', 'label' => '仪表盘'],
            ],
            'full_summary' => "经检测，此车无重大事故，无水泡，无火烧，所有因加装配件导致的连锁问题均不属于公司售后的服务范畴。\n\n车身骨架 正常\n车辆内饰 正常\n电子设备 正常\n机械性能 正常\n配置加装 正常",
            'notes' => [
                "注意事项：雨刮、电瓶、火花塞、灯泡、皮带等易损耗件需及时检查更换。",
                "天窗导水槽建议疏通以防漏水。",
            ],
        ];

// 调用生成 PDF 方法
        $pdfPath = $this->generateVehicleReport($data);
        echo "报告已生成: $pdfPath\n";
    }


    public function urlToPdf($url) {
        $fontFiles = [
            'songti' => ROOT_PATH . '/public/font/simsun.ttc',  // SimSun 或其他字体
            'hei' => ROOT_PATH . '/public/font/simhei.ttf',     // SimHei 或其他字体
        ];
        // 设置字体目录和字体文件路径
        $fontDir =ROOT_PATH . '/public/font';
//        $fontDir = ROOT_PATH . '/public';
        // 创建 mPDF 实例
        $mpdf = new \Mpdf\Mpdf([
            'autoScriptToLang' => true,
            'autoLangToFont'   => true,
            'useSubstitutions' => true,
            'ignore_invalid_utf8'=>true,
            'text_input_as_HTML'=>true,
            'useAdobeCJK'=>true,
            'showWatermarkText'=>true,
        ]);
        $mpdf->SetDisplayMode('fullpage');
        // 添加自定义字体

//        $mpdf->AddFont($this->fontPath, '');
//        $mpdf->SetFont($this->fontPath, '');

        // 使用 file_get_contents 获取网页内容
        $htmlContent = file_get_contents($url);
//        $htmlContent = mb_convert_encoding($htmlContent, 'UTF-8', 'auto'); // 转换为 UTF-8 编码

        // 设置页面内容
        $mpdf->WriteHTML($htmlContent);
        // 检查是否成功获取内容
//        if ($htmlContent === false) {
//            die('无法获取网页内容');
//        }

        // 写入 HTML 内容到 PDF
        $mpdf->WriteHTML($htmlContent);

        // 输出 PDF 文件
//        $pdf->Output($outputPath, 'F'); // 'F' 表示保存为文件
        $outputPath = $this->outputPath;
        $mpdf->Output($outputPath, 'F');
        return $outputPath; // 返回 PDF 文件路径
    }

    public function test5()
    {
         $this->urlToPdf('https://car.3llh.com/index/index/pdf');
    }
    function fetchHtmlWithCurl($url) {
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); // 跟随重定向
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 忽略 SSL 证书验证
        $output = curl_exec($ch);
        curl_close($ch);
        return $output;
    }


}
